机器学习模型效果评估一定要用交叉验证吗? 您所在的位置:网站首页 k折交叉验证 pytorch 机器学习模型效果评估一定要用交叉验证吗?

机器学习模型效果评估一定要用交叉验证吗?

2023-03-11 06:06| 来源: 网络整理| 查看: 265

泻药,模型表现差异很大的可能原因是什么?换句话说,为什么在别人评估我们的模型时会失去稳定性?

原文链接:原文出处:介绍

在本文中,我们将探讨可能的原因。我们还将研究交叉验证的概念以及执行它的一些常用方法。

目录为什么模型会失去稳定性?什么是交叉验证?交叉验证的几种常用方法验证集方法留一法交叉验证(LOOCV)k折交叉验证分层k折交叉验证对抗验证时间序列的交叉验证自定义交叉验证技术

如何测量模型的偏差方差?为什么模型会失去稳定性?

让我们使用下面的快照来说明各种模型的拟合情况,以了解这一点:

在这里,我们试图找到数量和价格之间的关系。为此,我们采取了以下步骤:

我们使用线性方程式建立了关系,并为其显示曲线图。从训练数据点来看,第一幅图有很高的误差。在这种情况下,我们的模型无法捕获数据的潜在趋势在第二个图中,我们刚刚发现了价格和数量之间的正确关系,即较低的训练误差在第三个图中,我们发现训练误差几乎为零的关系。这是因为通过考虑数据点中的每个偏差(包括噪声)来建立关系,即模型过于敏感并且捕获仅在当前数据集中存在的随机模式。这是“过度拟合”的一个例子。

数据科学竞赛的一种常见做法是迭代各种模型以找到性能更好的模型。为了找到正确的答案,我们使用验证技术。

什么是交叉验证?

在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预测,并求这小部分样本的预测误差,记录它们的平方和。

以下是交叉验证中涉及的步骤:

保留 样本数据集使用数据集的其余部分训练模型使用测试(验证)集的备用样本。帮助您评估模型性能的有效性。交叉验证的几种常用方法

有多种方法可用于执行交叉验证。我已经在本节中讨论了其中一些。

验证集方法

在这种方法中,我们将数据集的50%保留用于验证,其余50%用于模型训练。但是,这种方法的主要缺点是,由于我们仅在50%的数据集上训练模型,因此很可能会错过一些有关数据的信息,导致更高的偏差。

Python代码:

train, validation = train_test_split(data, test_size=0.50, random_state = 5)

R代码:

set.seed(101) # 设置种子,以便将来可以复制相同的样本#现在从数据的总共“ n”行中选择50%的数据作为样本sample

现在,最常见的问题之一是:“如何选择正确的k值?”。

k的 值越低, 偏差越大。另一方面,较高的K值偏差较小,但可能会出现较大的可变性。

准确地说,LOOCV等效于n倍交叉验证,其中n是训练的数量。

Python代码:

kf = RepeatedKFold(n_splits=5, n_repeats=10, random_state=None)

R代码:

# 定义训练集进行k折交叉验证trainControl(method="cv", number=10)# 拟合朴素贝叶斯模型train(Species~., data=iris, trControl=train_control, method="nb")# 总结结果

4.分层k折交叉验证

分层是重新排列数据的过程,以确保每个折都能很好地代表整体。例如,在二进制分类问题中,每个类别包含50%的数据,最好安排数据,在每一折中每个类别包含大约一半的实例。

当同时处理偏差和方差时,这通常是更好的方法。

用于分层k折交叉验证的Python代码段:

# X是特征集,y是因变量for train_index, test_index in skf.split(X,y): print("Train:", train_index, "Validation:", val_index)

R代码:

#折是根据因变量创建的folds

我们逐步选择新的训练和测试集。我们从一个训练集开始,该训练集具有最小拟合模型所需的观测值。逐步地,我们每次折叠都会更改训练和测试集。在大多数情况下,第一步预测可能并不十分重要。在这种情况下,可以将预测原点移动来使用多步误差。例如,在回归问题中,以下代码可用于执行交叉验证。

Python代码:

X_train, X_test = X[train_index], X[val_index] y_train, y_test = y[train_index], y[val_index]TRAIN: [0] TEST: [1]TRAIN: [0 1] TEST: [2]TRAIN: [0 1 2] TEST: [3]

R代码:

tsCV(ts, Arima(x, order=c(2,0,0), h=1) # arima模型交叉验证sqrt(mean(e^2, na.rm=TRUE)) # RMSE

h = 1表示我们仅对提前1步的预测采用误差。

(h = 4)下图描述了4步提前误差。如果要评估模型来进行多步预测,可以使用此方法。

7.自定义交叉验证技术

如果没有一种方法可以最有效地解决各种问题。则可以创建基于函数或函数组合的自定义交叉验证技术。

如何测量模型的偏差方差?

经过k倍交叉验证后,我们将获得 k个 不同的模型估计误差(e1,e2…..ek)。在理想情况下,这些误差值应总计为零。为了得到模型的偏差,我们获取所有误差的平均值。降低平均值,使模型更好。

同样,为了计算模型方差,我们将所有误差作为标准差。标准偏差值低表明我们的模型在不同的训练数据子集下变化不大。

我们应该集中精力在偏差和方差之间取得平衡。可以通过减小方差并在一定程度上控制偏差来实现。这将获得更好的预测模型。这种权衡通常也会导致建立不太复杂的预测模型。

尾注

在本文中,我们讨论了过度拟合和诸如交叉验证之类的方法,来避免过度拟合。我们还研究了不同的交叉验证方法,例如验证集方法,LOOCV,k折交叉验证,分层k折等,然后介绍了每种方法在Python中的实现以及在Iris数据集上执行的R实现。

最受欢迎的见解

1.Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型

2.基于R语言的疾病制图中自适应核密度估计的阈值选择方法

3.WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

4.R语言回归中的hosmer-lemeshow拟合优度检验

5.matlab实现MCMC的马尔可夫切换ARMA – GARCH模型估计

6.R语言区间数据回归分析

7.R语言WALD检验 VS 似然比检验

8.python用线性回归预测股票价格

9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有